﻿using System.Collections.Generic;

namespace Triangle
{
    public class Map
    {
        private static int[][] table;
        private static Dictionary<int, Dictionary<int, bool>> color;
        public Map(int[][] map)
        {
            table = map;
            color = new Dictionary<int, Dictionary<int, bool>>
                    {
                        {0, new Dictionary<int, bool>()},
                        {1, new Dictionary<int, bool>()},
                        {2, new Dictionary<int, bool>()},
                        {3, new Dictionary<int, bool>()},
                        {4, new Dictionary<int, bool>()},
                        {5, new Dictionary<int, bool>()},
                        {6, new Dictionary<int, bool>()}
                    };

            // Миша я не пойму нахера вот это (если я правильно понял - это уже пройденные вершины)
            for (int j = 0; j < 7; ++j)
                for (int i = 0; i < 6; ++i)
                    color[j][i] = map[j][i] == 1; //возможно нужно было сделать так
                    //color[j][i] = true;
        }

        /// <summary>
        /// поиск по координатам
        /// </summary>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool Find(int i, int j, int value)
        {
            return table[j][i] == value && color[j][i];
        }

        /// <summary>
        /// поиск без использования цвета
        /// </summary>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool FindWithoutColor(int i, int j, int value)
        {
            return table[j][i] == value;
        }

        /// <summary>
        /// поиск по узлу(по координатам)
        /// </summary>
        /// <param name="node"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool Find(Node node, int value)
        {
            return Find(node.I, node.J, value);
        }
        /// <summary>
        /// любой не закрашеный
        /// </summary>
        /// <returns></returns>
        public static Node Find()
        {
            for (int j = 0; j < 7; ++j)
                for (int i = 0; i < 6; ++i)
                    if (color[j][i])
                        return new Node(i, j);
            return null;
        }
        /// <summary>
        /// закрасить
        /// </summary>
        /// <param name="collection"></param>
        /// <param name="pcolor"></param>
        public static void Paint(List<Node> collection, bool pcolor)
        {
            foreach (var node in collection)
                color[node.J][node.I] = pcolor;
        }

        public static int GetValueNode(Node node)
        {
            return table[node.J][node.I];
        }
    }
}
